package com.luyou;

import java.io.InputStream;
import java.sql.*;
import java.util.Properties;

/**
 * 查询可变结果集更新数据
 *
 * 如果要创建可更新的结果集，则使用查询语句查询的数据通常
 * 只能来自于一个数据表，而且查询结果集中的数据列必须包含主键
 * 列，否则将会引起更新失败。
 */
public class ResultSetTest{

        private String driver;
        private String url;
        private String user;
        private String pass;

        public void initParam(String paramFile) throws Exception
        {
            // 使用Properties类来加载属性文件
            Properties props = new Properties();
            InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream(paramFile);
            props.load(is);
            driver = props.getProperty("driver");
            url = props.getProperty("url");
            user = props.getProperty("user");
            pass = props.getProperty("pass");
        }

        public void query(String sql) throws ClassNotFoundException, SQLException {
            // 加载驱动
            Class.forName(driver);
            try(
                //获取数据库连接
                Connection conn = DriverManager.getConnection(url, user, pass);
                //结果可滚动,可更新
                PreparedStatement pstmt = conn.prepareStatement(sql, ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);
                ResultSet rs = pstmt.executeQuery(sql)
            ) {
                rs.last();
                int rowCount = rs.getRow();
                for (int i = rowCount; i > 0; i--) {
                    rs.absolute(i);
                    System.out.println();
                    ResultSetMetaData rmsd = rs.getMetaData();
                    for (int j = 1; j <= rmsd.getColumnCount(); j++) {
                        System.out.print(rmsd.getColumnName(j));
                        System.out.print(rs.getString(j));
                    }
                    System.out.println();
                    //修改指定指针记录、第2列
                    rs.updateString(2,"学生姓名" + i);
                    rs.updateRow();
                    System.out.println(rs.getString(1) +"\t" + rs.getString(2));
                }
            }
        }

    public static void main(String[] args) throws Exception {
        ResultSetTest rt = new ResultSetTest();
        rt.initParam("mysql.ini");
        //如果要创建可更新的结果集，则使用查询语句查询的数据通常只能来自于一个数据表，而且查询结果集中的数据列必须包含主键列，否则将会引起更新失败。
        rt.query("select * from student_table");
//        rt.query("select student_name, student_remark, student_id from student_table");
    }
}
